package com.company.task5;
/*
使用集合实现斗地主游戏的部分功能，要求如下：

 （1）首先准备 54 张扑克牌并打乱顺序。

 （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。

 （3）查看三个玩家手中的扑克牌和底牌。

 （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：

    手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */

import java.util.*;

public class PokerGame {

    public static void main(String[] args) {

        String[] colors = {"♣","♦","♠","♥"}; //花色数组
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //点数数组
        HashMap<Integer,String> orderedCard = new HashMap<Integer, String>();
        int cardIndex = 2;

        // 给卡牌加索引以便排序
        for(int i = 0; i < numbers.length; i++){
            for(int j = 0; j < colors.length; j++){
                String cardString = colors[j] + numbers[i];
                orderedCard.put(cardIndex, cardString);
                cardIndex++;
            }
        }

        orderedCard.put(0,"小王");
        orderedCard.put(1, "大王");

        // 建立储存卡牌的列表
        List<Integer> keySet = new ArrayList<Integer>();
        for(int i = 0; i < 54; i++) keySet.add(i);

        // 声明储存三个玩家卡牌的列表
        List<Integer> p1 = new ArrayList();
        List<Integer> p2 = new ArrayList();
        List<Integer> p3 = new ArrayList();

        // 声明储存底牌的列表
        List<Integer> dp = new ArrayList<Integer>();

        // 洗牌
        Collections.shuffle(keySet);

        // 发牌
        int mod; // 储存余数用于判断第几个玩家摸牌

        for(int i = 0; i < 51; i++){
            mod = i % 3;
            switch (mod){
                case 0: p1.add(keySet.get(i)); break;
                case 1: p2.add(keySet.get(i)); break;
                case 2: p3.add(keySet.get(i)); break;
                default: break;
            }
        }

        for(int i = 51; i < 54; i++){
            dp.add(keySet.get(i));
        }

        // 排序
        Collections.sort(p1);
        Collections.sort(p2);
        Collections.sort(p3);

        // 打印
        System.out.println("第一位玩家的牌");
        for(Integer index:p1) System.out.print(orderedCard.get(index) + " ");
        System.out.println();

        System.out.println("第二位玩家的牌");
        for(Integer index:p2) System.out.print(orderedCard.get(index) + " ");
        System.out.println();

        System.out.println("第三位玩家的牌");
        for(Integer index:p3) System.out.print(orderedCard.get(index) + " ");
        System.out.println();

        System.out.println("底牌");
        for(Integer index:dp) System.out.print(orderedCard.get(index) + " ");
        System.out.println();
    }
}
